package la.bbs558.satoken;

import cn.dev33.satoken.jwt.StpLogicJwtForSimple;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.strategy.SaStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.AnnotatedElementUtils;

/**
 * @Classname SaTokenConfigure
 * @Description TODO
 * @Date 2023/12/6 14:42
 * @Created by weihanmin
 */
@Configuration
public class SaTokenConfigure {
    // Sa-Token 整合 jwt (Simple 简单模式)
    @Bean
    public StpLogic getStpLogicJwt() {
        return new StpLogicJwtForSimple();
    }

    // Sa-Token 参数配置，参考文档：https://sa-token.cc
    // 此配置会覆盖 application.yml 中的配置
    // @Bean
    // @Primary
    // public SaTokenConfig getSaTokenConfigPrimary() {
    //     SaTokenConfig config = new SaTokenConfig();
    //     config.setJwtSecretKey("bbs558");
    //     config.setTokenName("satoken");             // token 名称（同时也是 cookie 名称）
    //     config.setTimeout(7 * 24 * 60 * 60);       // token 有效期（单位：秒），默认30天，-1代表永不过期
    //     config.setActivityTimeout(-1);              // token 最低活跃频率（单位：秒），如果 token 超过此时间没有访问系统就会被冻结，默认-1 代表不限制，永不冻结
    //     config.setIsConcurrent(false);               // 是否允许同一账号多地同时登录（为 true 时允许一起登录，为 false 时新登录挤掉旧登录）
    //     config.setIsShare(true);                    // 在多人登录同一账号时，是否共用一个 token （为 true 时所有登录共用一个 token，为 false 时每次登录新建一个 token）
    //     config.setTokenStyle(TOKEN_STYLE_TIK);        // token 风格
    //     config.setIsLog(true);                     // 是否输出操作日志
    //     return config;
    // }

    public void rewriteSaStrategy() {
        // 重写Sa-Token的注解处理器，增加注解合并功能
        SaStrategy.me.getAnnotation = AnnotatedElementUtils::getMergedAnnotation;
    }

}
